/*
 * Indexador.h
 *
 *  Created on: Sep 10, 2012
 *      Author: romina
 */

#ifndef INDEXADOR_H_
#define INDEXADOR_H_

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
#include <fstream>
#include <string>
#include "../Comunes/ArchivosManager.h"
#include "../Comunes/Palabra.h"
#include "../Comunes/Constantes.h"
#include "../Comunes/Random.h"

using namespace archivos;
using namespace std;
using namespace palabra;


namespace indexador {


class LongitudIndiceException: public exception
{
  virtual const char* what() const throw()
  {
    return "No se pudo crear un indice. La longitud no coincide con la predeterminada.";
  }
};

class Indexador {
private:
	Random * aleatorio;
	ArchivoDeTexto * text_file;
	ArchivoBinario * indexed_file_bin;
	ArchivoDeTexto * indexed_file_text;
	//devuelve una cadena de la forma [id][linea][ ]
	string formatear_para_binario(string id, string linea);
	//devuelve una cadena de la forma [id]TAB[linea]
	string formatear_para_texto(string id, string linea);
	//genera un indice del tipo string de longitud
	//igual a LONG_INDICE . si es menor se agregan ceros adelante
	string generarIdAleatorio();
public:
	Indexador(string path);
	//crea dos archivos a partir de un archivo de texto
	//donde agrega indices aleatorios en cada renglon
	void indexar_archivo();
	virtual ~Indexador();
};

} /* namespace indexador */
#endif /* INDEXADOR_H_ */
